package dk.pun.dums.shared.character;

public enum Clan {

	ASSAMITE		("Assamite", new TalentType[] { TalentType.PHYSICAL }, Ability.MELEE_FIGHTING,
						new DisciplineType[] { DisciplineType.OBFUSCATE, DisciplineType.QUIETUS },
						new Sect[] { Sect.INDEPENDENT, Sect.SABBAT },
						new Drawback[] { Drawback.BLODIG_AFHAENGIGHED }),
	BRUJAH			("Brujah", new TalentType[] { TalentType.PHYSICAL }, Ability.MELEE_FIGHTING,
						new DisciplineType[] { DisciplineType.PRESENCE, DisciplineType.POTENCE },
						new Sect[] { Sect.CAMARILLA, Sect.SABBAT },
						new Drawback[] { Drawback.DYB_VREDE, Drawback.KORT_LUNTE }),
	CAITIFF			("Caitiff", new TalentType[] { TalentType.PHYSICAL, TalentType.MENTAL }, null,
						new DisciplineType[] { },
						new Sect[] { },
						new Drawback[] { }),
	GANGREL			("Gangrel", new TalentType[] { TalentType.PHYSICAL }, Ability.SURVIVAL_NATURE,
						new DisciplineType[] { DisciplineType.ANIMALISM, DisciplineType.PROTEAN },
						new Sect[] { Sect.INDEPENDENT, Sect.SABBAT },
						new Drawback[] { Drawback.DYRISK_DEFORMITET, Drawback.DYRISK }),
	GIOVANNI		("Giovanni", new TalentType[] { TalentType.MENTAL }, Ability.KNOWLEDGE,
						new DisciplineType[] { DisciplineType.DOMINATE, DisciplineType.NECROMANCY },
						new Sect[] { Sect.INDEPENDENT },
						new Drawback[] { Drawback.BITTERT_KYS }),
	LASOMBRA		("Lasombra", new TalentType[] { TalentType.MENTAL }, Ability.KNOWLEDGE,
						new DisciplineType[] { DisciplineType.DOMINATE, DisciplineType.OBTENEBRATION },
						new Sect[] { Sect.SABBAT },
						new Drawback[] { Drawback.LYSSENSITIV, Drawback.SYNLIGT_VAMPYR }),
	MALKAVIAN		("Malkavian", new TalentType[] { TalentType.MENTAL }, Ability.INVESTIGATION,
						new DisciplineType[] { DisciplineType.AUSPEX, DisciplineType.DEMENTATION },
						new Sect[] { Sect.CAMARILLA, Sect.SABBAT },
						new Drawback[] { Drawback.MENTAL_SYGDOM }),
	NOSFERATU		("Nosferatu", new TalentType[] { TalentType.PHYSICAL }, Ability.SURVIVAL_URBAN,
						new DisciplineType[] { DisciplineType.OBFUSCATE, DisciplineType.POTENCE },
						new Sect[] { Sect.CAMARILLA, Sect.SABBAT },
						new Drawback[] { Drawback.MONSTROES }),
	RAVNOS			("Ravnos", new TalentType[] { TalentType.PHYSICAL }, Ability.CRIMINALITY,
						new DisciplineType[] { DisciplineType.CHIMERSTRY, DisciplineType.FORTITUDE },
						new Sect[] { Sect.INDEPENDENT, Sect.SABBAT },
						new Drawback[] { Drawback.TVANGSFORESTILLING, Drawback.KLEPTOMAN }),
	SETS_DISCIPLE	("Sets Disciple", new TalentType[] { TalentType.MENTAL }, Ability.SURVIVAL_URBAN,
						new DisciplineType[] { DisciplineType.PRESENCE, DisciplineType.SERPENTIS },
						new Sect[] { Sect.INDEPENDENT },
						new Drawback[] { Drawback.LYSSENSITIV }),
	TOREADOR		("Toreador", new TalentType[] { TalentType.MENTAL }, Ability.SURVIVAL_URBAN,
						new DisciplineType[] { DisciplineType.AUSPEX, DisciplineType.PRESENCE },
						new Sect[] { Sect.CAMARILLA, Sect.SABBAT },
						new Drawback[] { Drawback.FORTABELSE, Drawback.PACIFIST, Drawback.BLOEDHJERTET }),
	TREMERE			("Tremere", new TalentType[] { TalentType.MENTAL }, Ability.OCCULT,
						new DisciplineType[] { DisciplineType.AUSPEX, DisciplineType.THAUMATURGY },
						new Sect[] { Sect.CAMARILLA },
						new Drawback[] { Drawback.SIRE_BUNDET, Drawback.SIRES_BLODSBAAND }),
	TZIMISCE		("Tzimisce", new TalentType[] { TalentType.MENTAL }, Ability.OCCULT,
						new DisciplineType[] { DisciplineType.DOMINATE, DisciplineType.VICISSITUDE },
						new Sect[] { Sect.SABBAT },
						new Drawback[] { Drawback.NOEDVENDIGHED }),
	VENTRUE			("Ventrue", new TalentType[] { TalentType.MENTAL }, Ability.KNOWLEDGE,
						new DisciplineType[] { DisciplineType.DOMINATE, DisciplineType.FORTITUDE },
						new Sect[] { Sect.CAMARILLA, Sect.SABBAT },
						new Drawback[] { Drawback.KRAESEN, Drawback.RESTRIKTIV_DIAET });

	private final String name;
	private final TalentType[] talentTypes;
	private final Ability ability;
	private final DisciplineType[] disciplineTypes;
	private final Sect[] sects;
	private final Drawback[] drawbacks;
	
	private Clan(final String name,
			final TalentType[] talentTypes,
			final Ability ability,
			final DisciplineType[] disciplineTypes,
			final Sect[] sects,
			final Drawback[] drawbacks) {
		this.name = name;
		this.talentTypes = talentTypes;
		this.ability = ability;
		this.disciplineTypes = disciplineTypes;
		this.sects = sects;
		this.drawbacks = drawbacks;
	}
	
	public String getName() {
		return this.name;
	}
	
	public TalentType[] getTalentTypes() {
		return this.talentTypes;
	}
	
	public Ability getAbility() {
		return this.ability;
	}
	
	public DisciplineType[] getDisciplineTypes() {
		return this.disciplineTypes;
	}
	
	public Sect[] getSects() {
		return this.sects;
	}
	
	public Drawback[] getDrawbacks() {
		return this.drawbacks;
	}

	public String toString() {
		return this.name;
	}
}
